package com.lipy.java8study.bigDecimal;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * @Description BigDecial study
 * @Date 2020/11/25 9:52
 * @Created by lipye
 */
public class BigDecimalDemo {
    /**
     * 总结
     * 使用字符串 作为入参 创建BigDecimal
     * 如果有double变量 则先string.fromat 在创建
     *  0.1和0.10 BigDeciaml equal 比较值和精度 false  compareto 只比较值 true
     *  数值溢出的BigDecimal 转换基本类型时 xxxValue 不报错 xxxValueExact 会报错
     * @param args
     */
    public static void main(String[] args) {
        // 0.1000000000000000055511151231257827021181583404541015625
        System.out.println(new BigDecimal(0.1));
        // 0.1  使用字符串初始化double类型 BigDecimal
        System.out.println(new BigDecimal("0.1"));

        // double 类型的变量 可以 先格式化
        double da = 3.32;
        System.out.println(String.format("%.2f",da));
        //
        System.out.println(new BigDecimal(String.format("%.2f",da)));

        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b10 = new BigDecimal("0.10");
        BigDecimal b1c = new BigDecimal("0.1");

        // false
        System.out.println(b1.equals(b10));
        // true
        System.out.println(b1.equals(b1c));

        // 0
        System.out.println(b1.compareTo(b10));
        // 0
        System.out.println(b1.compareTo(b1c));

        BigInteger bi = new BigInteger(String.valueOf(Long.MAX_VALUE));
        BigInteger add = bi.add(BigInteger.ONE);
        // -9223372036854775808
        System.out.println(add.longValue());
        // 报错 " java.lang.ArithmeticException: BigInteger out of long range
        System.out.println(add.longValueExact());

    }

}
